home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / nihcl-30.lha / nihcl-3.0 / errfac / dofile.c < prev    next >
C/C++ Source or Header  |  1990-05-15  |  3KB  |  120 lines

  1. /* dofile.c -- Miscellaneous file-handling functions
  2.  
  3.     THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A
  4.     "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE
  5.     AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT
  6.     CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE
  7.     PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO
  8.     RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.
  9.  
  10. Author:
  11.     S.M. Orlow
  12.     Systex,Inc.
  13.     Beltsville, MD 20705
  14.     301-474-0111
  15.     June, 1986
  16.  
  17. Contractor:
  18.     K. E. Gorlen
  19.     Bg. 12A, Rm. 2017
  20.     Computer Systems Laboratory
  21.     Division of Computer Research and Technology
  22.     National Institutes of Health
  23.     Bethesda, Maryland 20892
  24.     Phone: (301) 496-5363
  25.     uucp: uunet!nih-csl!kgorlen
  26.     Internet: kgorlen@alw.nih.gov
  27.  
  28. Function:
  29.  
  30. Miscellaneous file-handling functions.
  31.  
  32. $Log:    dofile.c,v $
  33.  * Revision 3.0  90/05/15  22:36:54  kgorlen
  34.  * Release for 1st edition.
  35.  * 
  36. */
  37.  
  38. static const char rcsid[] = "$Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/errfac/RCS/dofile.c,v 3.0 90/05/15 22:36:54 kgorlen Rel $";
  39.  
  40. #include "dofile.h"
  41. #include <string.h>
  42. #include <fcntl.h>
  43. #include <osfcn.h>
  44.  
  45. extern int errno;
  46.  
  47. /* base_filename -- extract base file name (drop extension) */
  48. char* base_filename(char* p) {
  49.   char* p0 = p;
  50.  
  51.   while ( (*p0 != '\0')&&(*p0 != '.') ) ++p0;
  52.  
  53.   char* q = new char[p0-p+1];
  54.   char* q0 = q;
  55.   while ( p != p0 )
  56.     *(q++) = *(p++);
  57.   *q = '\0';
  58.   return q0;
  59. }/* base_filename */
  60.  
  61. /* ext_filename -- extract extension from filename */
  62. char* ext_filename(char* p) {
  63.   while ( (*p != '\0')&&(*p != '.') ) ++p;
  64.   char* q = new char[strlen(p)+1];
  65.   strcpy(q,p);
  66.   return q;
  67. } /* end ext_filename*/
  68.  
  69.  
  70. ostream* open_ostream(char* fname) {
  71.   errno = 0;
  72.  
  73.   int fd;
  74.   ostream* strm = new ostream((fd=creat(fname,0664),fd));
  75.   if ( fd == -1 ) {
  76.    switch ( errno ) {
  77.      case 2:
  78.        cerr << "errgen> file does not exist -- " << fname << "\n";
  79.        break;
  80.      default:
  81.        cerr << "errgen> file not open -- " << fname << "\n";
  82.        break;
  83.      };
  84.    exit(1);
  85.    };
  86.   cerr << "open_ostream> " << fname << "\n";
  87.   return strm;
  88. }
  89.  
  90. ostream* append_ostream(char* fname) {
  91. cerr << "append_ostream> " << fname << "\n";
  92.   int fd;
  93.   ostream* strm = new ostream((fd=open(fname,O_APPEND),fd));
  94.   if ( fd == -1 ) {
  95.    cerr << "errgen> file not open -- " << fname << "\n";
  96.    exit(1);
  97.    };
  98.   return strm;
  99. }
  100.  
  101. istream* open_istream(char* fname) {
  102.   errno = 0;
  103.   int fd;
  104.   istream* strm = new istream((fd=open(fname,O_RDONLY),fd));
  105.   if ( fd == -1 ) {
  106.     switch ( errno ) {
  107.       case 2:
  108.         cerr << "errgen> file does not exist -- " << fname << "\n";
  109.         break;
  110.       default:
  111.         cerr << "errgen> file not open -- " << fname << "\n";
  112.         break;
  113.       };
  114.  
  115.    exit(1);
  116.    };
  117.   cerr << "open_istream> " << fname << "\n";
  118.   return strm;
  119. }
  120.